package zsc.ruanc.practicaltraining.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import zsc.ruanc.practicaltraining.mapper.ArticleMapper;
import zsc.ruanc.practicaltraining.model.domain.TArticle;
import zsc.ruanc.practicaltraining.model.domain.TStatistic;
import zsc.ruanc.practicaltraining.model.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 文章模块
 */
public interface ArticleService {


    /**
     * 新建文章
     * @param vo
     * @param userId
     * @return
     */
    public boolean insert(ArticleVo vo, int userId);

    /**
     * 删除文章
     * @param id
     * @param userId
     * @return
     */
    public boolean delete(int id, Integer userId);

    /**
     *  获得一篇详细的文章
     * @param id 文章id
     * @return
     */
    public getArticleVo getArticle(int id, Integer userId);

    /**
     * 查询用户的所有文章
     * @param userId
     * @param cur
     * @param size
     * @param flag
     * @return
     */
    public Map selectPageByUser(int userId, int cur, int size, Boolean flag);

    /**
     * 模糊查找
     * @param text
     * @param cur
     * @param size
     * @return
     */
    public Map selectPage(String text, int cur, int size);

    /**
     * 更新文章
     * @param vo
     * @return
     */
    public boolean updateArticle(UpdateArticleVo vo, int userId);

    /**
     * 修改是否可评论
     * @param id
     * @param flag
     * @param userId
     * @return
     */
    public boolean updateAllow(int id, boolean flag, int userId);

    /**
     * 上传附件
     * @param file
     * @param id 用户id
     * @return 文件url
     */
    public String uploadFile(MultipartFile file, int id);

    /**
     * 上传图片
     * @param file
     * @param id 用户id
     * @return  文件url
     */
    public String uploadImg(MultipartFile file, int id);

    /**
     * 点赞
     * @param articleId
     * @return
     */
    public boolean likesAndOne(int articleId);

    /**
     * 取消点赞
     * @param articleId
     * @return
     */
    public boolean likesCutOne(int articleId);

    /**
     *   推荐文章
     * @param row
     * @param orderColumnName
     * @return
     */
    public List<getArticleVo> recommendList(int row, String orderColumnName);

    // 对用户文章的分析
    public Map articleAnalysis(int userId);

    // 按分类查找
    public Map selectByCategories(int cur, int size, String categories);

    //---------管理员权限---------------------------

    /**
     * 是否通过审核
     * @param id
     * @param flag
     * @return
     */
    public boolean updateFlag(int id, boolean flag);

    /**
     * 查询所有文章
     * @param cur
     * @param size
     * @param flag 为null时，查询所有文章 为true时，查询所有已审核文章 为false时，查询所有未审核文章
     * @return
     */
    public Map selectAll(int cur, int size, Boolean flag);

    /**
     * 查询本系统的文章数量
     * @param flag 为null时，查询所有文章 为true时，查询所有已审核文章 为false时，查询所有未审核文章
     * @return
     */
    public int articleCount(Boolean flag);

    /**
     * 修改文章统计表值
     * @param vo
     * @return
     */
    public boolean updateStatistic(TStatistic vo);


    public Map selectByTime(TimeVo vo);

}
